/*
javascrpt包括8个关系运算符，大致和java中的使用方法一致，不过JavaScript还可以进行字符串比较
大于 >
小于 <
大于等于 >=
小于等于 <=
相等 ==
不等 !=
全等 ===
不全等 !==
 */

console.log(6>7)
console.log('aa' > 'bb')
console.log('ab' > 'ba')
//字符串比较，比较的是ascii码值

/*
全等和相等有什么区别
java中，运算符两边如果是不同的基本数据类型，会得到false，而js中不是这样
*/
console.log('10' == 10)
console.log('10' === 10)
/*
js中，==的比较规则是，当操作数类型一样时，比较的规则和恒等运算符一样，都相等才相等。
如果两个操作数是字符串，则进行字符串的比较。
如果一边是字符串，一边是数字，则两个操作数通过Number()方法进行转换，转成数字进行比较
*/

//逻辑运算符，包括 &&、||、&、|、?、!等
//&表示按位与，把数字转换为2进制，按位进行与，都为1结果才为1
console.log(4&7)
//|表示按位或，把数字转换为2进制，按位进行或，有1位为1，结果则为1
console.log(4|7)

//&& 与，只要两边没有0，则结果为值大的一边，有0的话结果为0
console.log(0 && 1)
console.log(-1 && 1)

//|| 或，两边都为0 ，结果为0；左边不为0，先判断的左边，结果为左边
console.log(-1 || 0)
console.log(true || 7)
console.log(7 || true)

console.log(true || false)

//布尔运算，对于数字型，o代表false，只要不为0，就为true
console.log(!0)
console.log(!1)

//布尔运算，对于字符型，只要不为空串，则为true
console.log(!"a")
console.log(!"")

//几个特殊值
console.log(!undefined)
console.log(!null)
console.log(!NaN)

//三元运算符,得益于JS的动态类型，三元运算符不一定需要固定的返回值类型
let a = true ? "xx" : 20
console.log(a)